﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

public partial class stock_registro_iva : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Menu m = Session["Menu"] as Menu;
        if (m == null) Response.Redirect("../login.aspx");
        if (!m.Stock)
        {
            Response.Redirect("../home/home.aspx");
        }


        desactivarCampos();
        SetFocus(btnNuevo);

        if (!Page.IsPostBack)
        {
            llenarDatosGrid();
        }
        Menu menuLateral = new Menu();
        lblMenuLateral.Text = menuLateral.MenuStockDetalles();
    }

    /*************Botones***********************/

    protected void btnNuevo_Click(object sender, EventArgs e)
    {
        activarCampos();
        limpiarCampos();
        btnGuardar.Visible = true;
        btnNuevo.Visible = false;
        btnCancelar.Enabled = true;
        btnBuscar.Enabled = false;
        SetFocus(txtPorcentaje);
        lblMensaje.Text = "";


    }
    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        btnNuevo.Visible = true;
        btnCancelar.Enabled = false;
        btnGuardar.Visible = false;
        btnGuardarModif.Visible = false;
        btnBuscar.Enabled = true;
        limpiarCampos();
        desactivarCampos();
    }

    protected void btnGuardar_Click(object sender, EventArgs e)
    {
        Iva iva = new Iva();

        cargarDesdeInterfaz(iva);

        try
        {
            iva.Guardar();
            lblMensaje.Text = "Registrado correctamente";
            limpiarCampos();
            llenarDatosGrid();
        }
        catch (ConexionException ex)
        {
            lblMensaje.Text = ex.Message;
        }

        desactivarCampos();
        btnGuardar.Visible = false;
        btnCancelar.Enabled = false;
        btnNuevo.Visible = true;
        btnBuscar.Enabled = true;
        
    }



    protected void btnAceptarEliminar_Click(object sender, EventArgs e)
    {
        Iva iva = Session["IvaSeleccionado"] as Iva;
        try
        {
            iva.Borrar();
            lblMensaje.Text = "Borrado correctamente";
            btnNuevo.Visible = true;
            btnCancelar.Enabled = false;
            btnGuardar.Visible = false;
            btnGuardarModif.Visible = false;
            btnBuscar.Enabled = true;

            limpiarCampos();
            llenarDatosGrid();

        }
        catch (ConexionException ex)
        {
            lblMensaje.Text = ex.Message;
        }
    }

    protected void btnBuscar_Click(object sender, EventArgs e)
    {
        lblMensaje.Text = "";
        SetFocus(txtPorcentajeBuscar);
        mpeBuscar.Show();

    }

    protected void btnGuardarModif_Click(Object sender, EventArgs e)
    {

        Iva iva = Session["IvaSeleccionado"] as Iva;
        cargarDesdeInterfaz(iva);


        try
        {
            iva.Actualizar();
            lblMensaje.Text = "modificado correctamente";
            btnGuardarModif.Visible = false;
            btnNuevo.Visible = true;
            btnCancelar.Enabled = false;
            btnGuardar.Visible = false;
            btnBuscar.Enabled = true;
            llenarDatosGrid();
            limpiarCampos();
        }
        catch (ConexionException ex)
        {
            lblMensaje.Text = ex.Message;
        }


    }

    

    /*****************funciones auxiliares*****************/

    private void cargarDesdeInterfaz(Iva iva)
    {
        iva.Porcentaje = Convert.ToInt32(txtPorcentaje.Text);
        iva.Descripcion = txtDescripcion.Text;
        iva.Estado = "a";//activo por defecto        

    }

    
    private void desactivarCampos()
    {
        txtPorcentaje.Enabled = false;
        txtDescripcion.Enabled = false;
    }

    private void activarCampos()
    {
        txtPorcentaje.Enabled = true;
        txtDescripcion.Enabled = true;
    }

    private void limpiarCampos()
    {
        txtPorcentaje.Text = "";
        txtDescripcion.Text = "";
    }

    /**************************Controles de Busqueda*****************/
    
    protected void btnBuscarPopub_Click(object sender, EventArgs e)
    {

        llenarDatosGrid();

    }

    protected void btnLimpiarCampos_Click(object sender, EventArgs e)
    {

        limpiarCamposBuscar();
        mpeBuscar.Show();
    }

    private void llenarDatosGrid()
    {
        Iva iva = new Iva();
        Session["Iva"] = iva; //guardo en la session para utilizar sus metodos despues
        DataSet ds;
        try
        {
            ds = iva.Buscar(Convert.ToInt32(txtPorcentajeBuscar.Text), "");
        }
        catch {
            ds = iva.Listar();
        }
        
        gvIvas.DataSource = ds.Tables[0];
        gvIvas.DataBind();
        Session["Ivas"] = ds.Tables[0]; //Almaceno el DataSet en una variable de Session para usarla el Sorting del GridView

    }

    protected void gvIvas_RowCommand(object sender, GridViewCommandEventArgs e)
    {

        if (e.CommandName == "editar" || e.CommandName == "borrar")
        {
            gvIvas.SelectedIndex = Convert.ToInt32(e.CommandArgument);
            int idIva = Convert.ToInt32(gvIvas.SelectedDataKey.Value);

            //Recupera la tabla de la session
            DataTable dt = Session["Ivas"] as DataTable;

            //Busca en la tabla el row con el id seleccionado
            DataRow[] rows = dt.Select("id_iva = " + idIva + " ");

            //Creamos un objeto con los datos cargados del grid
            Iva iva = new Iva();
            iva.Id = idIva;

            iva.Porcentaje = Convert.ToInt32(rows[0]["porcentaje"].ToString());
            iva.Descripcion = rows[0]["descripcion"].ToString();

            //Guardamos el seleccionado en la session para poder modificarlo o eliminarlo despues
            Session["IvaSeleccionado"] = iva;

        }
        
        if (e.CommandName == "editar")
        {
            cargarSeleccionado(); //cargamos a la interfaz los datos del seleccionado
            activarCampos();
            btnGuardarModif.Visible = true;
            btnCancelar.Visible = true;           
            SetFocus(txtPorcentaje);
            lblMensaje.Text = "";
            
        }

        if (e.CommandName == "borrar")
        {
            mpeEliminar.Show();
        }
    }
    private void limpiarCamposBuscar()
    {
        txtPorcentajeBuscar.Text = "";
    }


    protected void gvIvas_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        gvIvas.PageIndex = e.NewPageIndex;
        gvIvas.DataSource = Session["Ivas"];
        gvIvas.DataBind();
    }

    //Ordena el GridView de Busqueda
    protected void gvIvas_Sorting(object sender, GridViewSortEventArgs e)
    {

        //Recupera la tabla de la session
        DataTable dt = Session["Ivas"] as DataTable;

        if (dt != null)
        {

            //Ordena los datos
            dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
            gvIvas.DataSource = Session["Ivas"];
            gvIvas.DataBind();
        }

    }

    private string GetSortDirection(string column)
    {

        // Por defecto, seteamos la direccion como ascendente
        string sortDirection = "ASC";

        // Recuparea la ultima columna que fue ordenada
        string sortExpression = ViewState["SortExpression"] as string;

        if (sortExpression != null)
        {

            if (sortExpression == column)
            {
                string lastDirection = ViewState["SortDirection"] as string;
                if ((lastDirection != null) && (lastDirection == "ASC"))
                {
                    sortDirection = "DESC";
                }
            }
        }
        // Guarda los nuevos valores en el ViewState
        ViewState["SortDirection"] = sortDirection;
        ViewState["SortExpression"] = column;

        return sortDirection;
    }

    /**
    * Carga el que había selecionado en la busqueda a la interfaz
    */
    private void cargarSeleccionado()
    {
        Iva iva = Session["IvaSeleccionado"] as Iva;

        txtPorcentaje.Text = iva.Porcentaje.ToString();
        txtDescripcion.Text = iva.Descripcion;

        btnGuardarModif.Visible = false;
        btnCancelar.Visible = true;
        btnCancelar.Enabled = true;
        btnGuardar.Visible = false;
        btnNuevo.Visible = false;

    }
}
